/**
 * @file master_ctr_circuit_node.h
 * @author Linquan  
 * @brief  控制全局的设备树的函数
 * @version 1.0
 * @date 2024-08-15
 * 
 * @copyright Copyright (c) 2024
 * 
 */
#ifndef MASTER_CTR_CYCLE_NODE_H
#define MASTER_CTR_CYCLE_NODE_H


#ifdef __cplusplus
extern "C" {
#endif

/*===========================[Includes]======================================*/
#include "../circuit_node/circuit_node.h"
#include "../circuit_node/circuit_node_collection.h"
#include "../config/config_file_analyse_callback.h"
/*===========================[Defines]=======================================*/

#define RELAY_ORDER_INVAILD   0X5AA5      /**> 中继号不存在 */ 

/*===========================[Macros]========================================*/

typedef struct 
{
    node_tree_ptr_t  master_node_tree[SELF_CIRCUIT_MAX];  // 全局主节点树
    
}master_global_mangment_t;


/*===========================[Typedef]=======================================*/

/**
 * @brief 全局管理
 * 
 */
extern  master_global_mangment_t MasterMangmentData;


/**
 * @brief 用于 根据91a设备序号在 节点树上找节点的结构体
 *  这里传入的值 是 对于整体的 主机号、中继号、设备号
 */
typedef struct 
{
   mod_91A_dev_addr_t dev_addr;
   circuit_node_t * node_ptr;
}find_91a_node_t;











/*===========================[Global Prototypes]=============================*/


/********************节点初始化相关函数********************** */
int create_circuit_node_by_table(dev_type_config_info_t *node_tree_ptr, cfg_circuit_overview_t table_head);

int trans_config_data_to_node(dev_type_config_info_t *node_tree_ptr, cfg_node_info_t config_info);

uint8_t check_config_node_num_is_equl(dev_type_config_info_t* type_cfg_info);



/**********节点操作函数，在节点没有初始化成功时，禁止使用************************* */
int get_node_from_master_tree_by_muti_addr(muti_addr_t *addr_ptr);

int get_node_from_master_tree_by_91a_dev_addr( find_91a_node_t *node_find);

int get_master_tree_node_number(uint8_t circuit_ID);




#ifdef __cplusplus
}
#endif

#endif